﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Asol.Reporting.Editor.Components
{
    #region class DControl : základní třída Control, kterou je doporučeno používat místo System.Windows.Forms.Control
    /// <summary>
    /// DControl : základní třída Control, kterou je doporučeno používat místo System.Windows.Forms.Control
    /// Podporuje inicializaci tooltipu.
    /// </summary>
    public class DControl : Control
    {
        #region Podpora inicializace tooltipu - až poté, kdy je control umístěn na formuláři!
        /// <summary>
        /// Po změně Visible.
        /// Při změně na true zajišťuje CheckToolTipInitialized() a Draw()
        /// </summary>
        /// <param name="e"></param>
        protected override void OnVisibleChanged(EventArgs e)
        {
            base.OnVisibleChanged(e);
            if (this.Visible)
                this.CheckToolTipInitialized();
        }
        /// <summary>
        /// Event, který je volán tehdy, když se má inicializovat Tooltip
        /// </summary>
        public event EventHandler ToolTipInitialize;
        /// <summary>
        /// Virtuální metoda, do které je vhodné v potomkovi vepsat kód pro inicializaci tooltipu.
        /// Metoda je volána jen tehdy, když objekt je již umístěn na Formu (tj. existuje již správce tooltipu), metoda je volána pouze jedenkrát.
        /// Je možné využít i eventu ToolTipInitialize.
        /// Bázová metoda na třídě DblGraphControl je prázdná.
        /// </summary>
        protected virtual void OnToolTipInitialize()
        { }
        /// <summary>
        /// Výkonná metoda, zajistí že bude inicializován Tooltip pro tento control.
        /// </summary>
        protected void CheckToolTipInitialized()
        {
            if (this.ToolTipInitialized) return;
            if (this.FindForm() == null) return;

            if (this.ToolTipInitialize != null)
                this.ToolTipInitialize(this, EventArgs.Empty);

            this.OnToolTipInitialize();

            this.ToolTipInitialized = true;
        }
        /// <summary>
        /// Příznak, že tooltip již prošel inicializací
        /// </summary>
        protected bool ToolTipInitialized = false;
        #endregion
    }
    #endregion
    #region class DPanel : základní třída Panel, kterou je doporučeno používat místo System.Windows.Forms.Panel
    /// <summary>
    /// DPanel : základní třída Panel, kterou je doporučeno používat místo System.Windows.Forms.Panel
    /// Podporuje inicializaci tooltipu.
    /// </summary>
    public class DPanel : Panel
    {
        #region Podpora inicializace tooltipu - až poté, kdy je control umístěn na formuláři!
        /// <summary>
        /// Po změně Visible.
        /// Při změně na true zajišťuje CheckToolTipInitialized() a Draw()
        /// </summary>
        /// <param name="e"></param>
        protected override void OnVisibleChanged(EventArgs e)
        {
            base.OnVisibleChanged(e);
            if (this.Visible)
                this.CheckToolTipInitialized();
        }
        /// <summary>
        /// Event, který je volán tehdy, když se má inicializovat Tooltip
        /// </summary>
        public event EventHandler ToolTipInitialize;
        /// <summary>
        /// Virtuální metoda, do které je vhodné v potomkovi vepsat kód pro inicializaci tooltipu.
        /// Metoda je volána jen tehdy, když objekt je již umístěn na Formu (tj. existuje již správce tooltipu), metoda je volána pouze jedenkrát.
        /// Je možné využít i eventu ToolTipInitialize.
        /// Bázová metoda na třídě DblGraphControl je prázdná.
        /// </summary>
        protected virtual void OnToolTipInitialize()
        { }
        /// <summary>
        /// Výkonná metoda, zajistí že bude inicializován Tooltip pro tento control.
        /// </summary>
        protected void CheckToolTipInitialized()
        {
            if (this.ToolTipInitialized) return;
            if (this.FindForm() == null) return;

            if (this.ToolTipInitialize != null)
                this.ToolTipInitialize(this, EventArgs.Empty);

            this.OnToolTipInitialize();

            this.ToolTipInitialized = true;
        }
        /// <summary>
        /// Příznak, že tooltip již prošel inicializací
        /// </summary>
        protected bool ToolTipInitialized = false;
        #endregion
    }
    #endregion
}
